import { buildFormatDatetimeStr } from '@/util/DateUtil'
import { Context } from 'koa'

export type RespCode = 200 | 401 | 500 | 400
export type RespData = unknown | string

export interface ResponseResult<RespData> {
  /**
   * 业务响应状态码
   */
  code: RespCode
  /**
   * 实际的业务数据
   */
  ret: RespData
  /**
   * 异常消息提示
   */
  errorMsg: string
  /**
   * 响应时间. 格式: YYYY-MM-DD HH:mm:ss
   */
  createAt: string
}

export function buildSuc<RespData>(ret: RespData): ResponseResult<RespData> {
  return {
    code: 200,
    ret: ret,
    errorMsg: '',
    createAt: buildFormatDatetimeStr(),
  }
}

export function buildExp(
  errorMsg = '接口出错了',
  code: RespCode = 400
): ResponseResult<string> {
  return {
    code: code,
    ret: '',
    errorMsg,
    createAt: buildFormatDatetimeStr(),
  }
}

/**
 * 向response body中输出业务接口执行成功的响应数据
 * @param ctx koa的Context
 * @param bizData 业务数据
 */
export function responseSucData<RespData>(ctx: Context, bizData?: RespData) {
  ctx.body = buildSuc(bizData ? bizData : '')
}

/**
 * 向response body中输出业务接口执行异常的响应数据
 * @param ctx koa的Context
 * @param errorMsg 异常提示信息
 */
export function responseExp(
  ctx: Context,
  errorMsg = '接口出错了',
  code: RespCode = 400
) {
  ctx.body = buildExp(errorMsg, code)
}
